package br.edu.fatecou.reserva.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.edu.fatecou.reserva.dominio.Recurso;
import br.edu.fatecou.reserva.util.HibernateUtil;

public class RecursoDAO {
	public void salvar(Recurso recurso) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Transaction transacao = sessao.beginTransaction();
		sessao.saveOrUpdate(recurso);
		transacao.commit();
		sessao.close();
	}

	public void editar(Recurso recurso) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Transaction transacao = sessao.beginTransaction();
		sessao.update(recurso);
		transacao.commit();
		sessao.close();
	}

	public void excluir(Recurso recurso) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Transaction transacao = sessao.beginTransaction();
		sessao.delete(recurso);
		transacao.commit();
		sessao.close();
	}

	public Recurso buscar(Long codigo) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Criteria consulta = sessao.createCriteria(Recurso.class);
		consulta.add(Restrictions.idEq(codigo));

		Recurso resultado = (Recurso) consulta.uniqueResult();
		sessao.close();

		return resultado;
	}

	@SuppressWarnings("unchecked")
	public List<Recurso> buscar(String nome) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Criteria consulta = sessao.createCriteria(Recurso.class);
		consulta.add(Restrictions.like("nome", "%" + nome + "%"));
		consulta.addOrder(Order.asc("nome"));
		

		List<Recurso> lista = consulta.list();
		sessao.close();

		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<Recurso> verificarPatrimonio(String patrimonio) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Criteria consulta = sessao.createCriteria(Recurso.class);
		consulta.add(Restrictions.eq("patrimonio",patrimonio));
		consulta.addOrder(Order.asc("patrimonio"));		

		List<Recurso> lista = consulta.list();
		sessao.close();

		return lista;
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Recurso> verificarPatrimonio(String patrimonio, String patrimonioVerificador) throws Exception {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Criteria consulta = sessao.createCriteria(Recurso.class);
		consulta.add(Restrictions.eq("patrimonio",patrimonio));
		consulta.add(Restrictions.ne("patrimonio", patrimonioVerificador));
		consulta.addOrder(Order.asc("patrimonio"));		
		

		List<Recurso> lista = consulta.list();
		sessao.close();

		return lista;
	}
}
